package com.atguigu.jxc.dao;

import com.atguigu.jxc.entity.Goods;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @program: jxc
 * @description:
 * @author: SXC
 * @create: 2021-09-04 10:14
 **/
public interface GoodsDao {
    /**
     * 获取数据
     * @param page
     * @param rows
     * @param codeOrName
     * @param goodsTypeId
     * @return
     */
    List<Goods> selectListInventory(@Param("page") Integer page,
                                    @Param("rows") Integer rows,
                                    @Param("codeOrName") String codeOrName,
                                    @Param("goodsTypeId") Integer goodsTypeId);

    /**
     * 获取条数
     * @return
     */
    int selectCount();

    /**
     * 获取数据
     * @param page
     * @param rows
     * @param goodsName
     * @param goodsTypeId
     * @return
     */
    List<Goods> selectGoodsList(@Param("page") Integer page,
                                @Param("rows") Integer rows,
                                @Param("goodsName") String goodsName,
                                @Param("goodsTypeId") Integer goodsTypeId);

    /**
     *获取当前商品最大编码
     * @return
     */
    String getMaxCode();

    /**
     * 添加商品
     * @param goods
     */
    void save(Goods goods);

    /**
     *修改商品
     * @param goods
     */
    void update(Goods goods);

    /**
     * 根据商品Id获取数据
     * @param goodsId
     */
    Goods selectGoods(Integer goodsId);

    /**
     * 删除商品
     * @param goodsId
     */
    void delete(Integer goodsId);

    /**
     * 获取无库存数据
     * @param page
     * @param rows
     * @param nameOrCode
     * @return
     */
    List<Goods> getNoInventoryQuantity(@Param("page") Integer page, @Param("rows") Integer rows, @Param("nameOrCode") String nameOrCode);

    /**
     * 获取无库存条数
     * @return
     */
    int countNoInventoryQuantity();

    /**
     * 获取所有库存数据
     * @param page
     * @param rows
     * @param nameOrCode
     * @return
     */
    List<Goods> getHasInventoryQuantity(@Param("page") Integer page, @Param("rows") Integer rows, @Param("nameOrCode") String nameOrCode);


    /**
     * 获取有库存条数
     * @return
     */
    int countHasInventoryQuantity();

    /**
     * 添加库存、修改数量或成本价
     * @param goodsId
     * @param inventoryQuantity
     * @param purchasingPrice
     */
    void saveStock(@Param("goodsId") Integer goodsId, @Param("inventoryQuantity") Integer inventoryQuantity, @Param("purchasingPrice") Double purchasingPrice);

    /**
     *  库存报警
     *  1、查询所有 当前库存量 小于 库存下限的商品信息
     * @return
     */
    List<Goods> selectListAlarm();


}
